#pragma once
#include "ASN1Encodable.h"

namespace AppliedCryptography
{
	class ASN1Set : public ASN1Encodable
	{
	private:
		std::set<ASN1Encodable*> _value;

	protected:
		ASN1Set(ClassBits classBits, ConstructedBit constucted, TypeNumberBits number);

	public:
		ASN1Set();

	protected:
		virtual const std::set<ASN1Encodable*>& getStdContainer() const;
		virtual std::set<ASN1Encodable*>& getStdContainer();

	public:
		virtual ASN1Set& add(ASN1Encodable& obj);
		virtual unsigned int size() const;
		virtual ASN1Encodable& get(unsigned int index) const;
		virtual std::vector<byte> getContentBits() const;
		virtual ASN1Set& flush();

	public:
		static ASN1Set getInstance(ASN1Encodable& obj);
	};
}; // namespace AppliedCryptography
